package com.freeter.modules.controller;

import com.freeter.modules.gjs.entity.DivisionsSites;
import com.freeter.modules.gjs.dto.DivisionsSitesDetailDTO;
import com.freeter.modules.gjs.service.DivisionsSitesService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 部门站点关联控制器
 * 提供基础CRUD操作和详细信息查询接口
 * 
 * @author freeter
 * @since 2024-01-01
 */
@RestController
@RequestMapping("/api/divisions-sites")
@CrossOrigin(origins = "*")
public class DivisionsSitesController {

    @Autowired
    private DivisionsSitesService divisionsSitesService;

    // ==================== 基础CRUD操作 ====================
    
    /**
     * 获取所有部门站点关联（基础信息）
     */
    @GetMapping
    public ResponseEntity<List<DivisionsSites>> getAllDivisionsSites() {
        List<DivisionsSites> divisionsSites = divisionsSitesService.getAllDivisionsSites();
        return ResponseEntity.ok(divisionsSites);
    }

    /**
     * 根据ID获取部门站点关联（基础信息）
     */
    @GetMapping("/{id}")
    public ResponseEntity<DivisionsSites> getDivisionsSitesById(@PathVariable Long id) {
        DivisionsSites divisionsSites = divisionsSitesService.getDivisionsSitesById(id);
        if (divisionsSites != null) {
            return ResponseEntity.ok(divisionsSites);
        }
        return ResponseEntity.notFound().build();
    }

    /**
     * 根据部门编码获取部门站点关联（基础信息）
     */
    @GetMapping("/division/{divisionCode}")
    public ResponseEntity<List<DivisionsSites>> getDivisionsSitesByDivisionCode(@PathVariable String divisionCode) {
        List<DivisionsSites> divisionsSites = divisionsSitesService.getDivisionsSitesByDivisionCode(divisionCode);
        if (divisionsSites != null && !divisionsSites.isEmpty()) {
            return ResponseEntity.ok(divisionsSites);
        }
        return ResponseEntity.notFound().build();
    }

    /**
     * 根据站点编码获取部门站点关联（基础信息）
     */
    @GetMapping("/site/{siteCode}")
    public ResponseEntity<List<DivisionsSites>> getDivisionsSitesBySiteCode(@PathVariable String siteCode) {
        List<DivisionsSites> divisionsSites = divisionsSitesService.getDivisionsSitesBySiteCode(siteCode);
        if (divisionsSites != null && !divisionsSites.isEmpty()) {
            return ResponseEntity.ok(divisionsSites);
        }
        return ResponseEntity.notFound().build();
    }

    /**
     * 根据部门和站点编码获取部门站点关联（基础信息）
     */
    @GetMapping("/division/{divisionCode}/site/{siteCode}")
    public ResponseEntity<DivisionsSites> getDivisionsSitesByDivisionAndSite(
            @PathVariable String divisionCode, 
            @PathVariable String siteCode) {
        DivisionsSites divisionsSites = divisionsSitesService.getDivisionsSitesByDivisionAndSite(Long.valueOf(divisionCode), siteCode);
        if (divisionsSites != null) {
            return ResponseEntity.ok(divisionsSites);
        }
        return ResponseEntity.notFound().build();
    }

    /**
     * 创建部门站点关联
     */
    @PostMapping
    public ResponseEntity<DivisionsSites> createDivisionsSites(@RequestBody DivisionsSites divisionsSites) {
        try {
            DivisionsSites createdDivisionsSites = divisionsSitesService.createDivisionsSites(divisionsSites);
            return ResponseEntity.ok(createdDivisionsSites);
        } catch (RuntimeException e) {
            return ResponseEntity.badRequest().body(null);
        }
    }

    /**
     * 更新部门站点关联
     */
    @PutMapping("/{id}")
    public ResponseEntity<DivisionsSites> updateDivisionsSites(
            @PathVariable Long id, 
            @RequestBody DivisionsSites divisionsSites) {
        DivisionsSites updatedDivisionsSites = divisionsSitesService.updateDivisionsSites(id, divisionsSites);
        if (updatedDivisionsSites != null) {
            return ResponseEntity.ok(updatedDivisionsSites);
        }
        return ResponseEntity.notFound().build();
    }

    /**
     * 删除部门站点关联
     */
    @DeleteMapping("/{id}")
    public ResponseEntity<Void> deleteDivisionsSites(@PathVariable Long id) {
        divisionsSitesService.deleteDivisionsSites(id);
        return ResponseEntity.ok().build();
    }

    /**
     * 根据部门和站点编码删除部门站点关联
     */
    @DeleteMapping("/division/{divisionCode}/site/{siteCode}")
    public ResponseEntity<Void> deleteDivisionsSitesByDivisionAndSite(
            @PathVariable String divisionCode, 
            @PathVariable String siteCode) {
        divisionsSitesService.deleteDivisionsSitesByDivisionAndSite(divisionCode, siteCode);
        return ResponseEntity.ok().build();
    }

    /**
     * 根据状态获取部门站点关联（基础信息）
     */
    @GetMapping("/status/{status}")
    public ResponseEntity<List<DivisionsSites>> getDivisionsSitesByStatus(@PathVariable String status) {
        List<DivisionsSites> divisionsSites = divisionsSitesService.getDivisionsSitesByStatus(status);
        if (divisionsSites != null && !divisionsSites.isEmpty()) {
            return ResponseEntity.ok(divisionsSites);
        }
        return ResponseEntity.notFound().build();
    }

    // ==================== 详细信息查询接口 ====================
    
    /**
     * 获取所有部门站点关联（详细信息）
     */
    @GetMapping("/detail")
    public ResponseEntity<List<DivisionsSitesDetailDTO>> getAllDivisionsSitesDetail() {
        List<DivisionsSitesDetailDTO> divisionsSitesDetail = divisionsSitesService.getAllDivisionsSitesDetail();
        return ResponseEntity.ok(divisionsSitesDetail);
    }

    /**
     * 根据ID获取部门站点关联（详细信息）
     */
    @GetMapping("/detail/{id}")
    public ResponseEntity<DivisionsSitesDetailDTO> getDivisionsSitesDetailById(@PathVariable Long id) {
        DivisionsSitesDetailDTO divisionsSitesDetail = divisionsSitesService.getDivisionsSitesDetailById(id);
        if (divisionsSitesDetail != null) {
            return ResponseEntity.ok(divisionsSitesDetail);
        }
        return ResponseEntity.notFound().build();
    }

    /**
     * 根据部门编码获取部门站点关联（详细信息）
     */
    @GetMapping("/detail/division/{divisionCode}")
    public ResponseEntity<List<DivisionsSitesDetailDTO>> getDivisionsSitesDetailByDivisionCode(@PathVariable String divisionCode) {
        List<DivisionsSitesDetailDTO> divisionsSitesDetail = divisionsSitesService.getDivisionsSitesDetailByDivisionCode(divisionCode);
        return ResponseEntity.ok(divisionsSitesDetail);
    }

    /**
     * 根据站点编码获取部门站点关联（详细信息）
     */
    @GetMapping("/detail/site/{siteCode}")
    public ResponseEntity<List<DivisionsSitesDetailDTO>> getDivisionsSitesDetailBySiteCode(@PathVariable String siteCode) {
        List<DivisionsSitesDetailDTO> divisionsSitesDetail = divisionsSitesService.getDivisionsSitesDetailBySiteCode(siteCode);
        return ResponseEntity.ok(divisionsSitesDetail);
    }

    /**
     * 根据部门和站点编码获取部门站点关联（详细信息）
     */
    @GetMapping("/detail/division/{divisionCode}/site/{siteCode}")
    public ResponseEntity<DivisionsSitesDetailDTO> getDivisionsSitesDetailByDivisionAndSite(
            @PathVariable String divisionCode, 
            @PathVariable String siteCode) {
        DivisionsSitesDetailDTO divisionsSitesDetail = divisionsSitesService.getDivisionsSitesDetailByDivisionAndSite(divisionCode, siteCode);
        if (divisionsSitesDetail != null) {
            return ResponseEntity.ok(divisionsSitesDetail);
        }
        return ResponseEntity.notFound().build();
    }

    /**
     * 根据状态获取部门站点关联（详细信息）
     */
    @GetMapping("/detail/status/{status}")
    public ResponseEntity<List<DivisionsSitesDetailDTO>> getDivisionsSitesDetailByStatus(@PathVariable String status) {
        List<DivisionsSitesDetailDTO> divisionsSitesDetail = divisionsSitesService.getDivisionsSitesDetailByStatus(status);
        return ResponseEntity.ok(divisionsSitesDetail);
    }
}